package day14.Streamdemo;

import day4.meiju.A;

import java.util.*;
import java.util.stream.Stream;

//获取数组或单列集合的Stream流，就是创建一个流水线，把数组或集合元素放到上面进行调用封装过的方法去操作,里面的方法很多都是lambda写的
//获取Stream是通过Collection的stream方法来获取的
public class demo1
{
    public static void main(String[] args)
    {
        List<String> list=new ArrayList<>();
        Stream<String> s1 = list.stream();
        list.add("java");
        list.add("php");
        list.add("python");
        list.add("c++");
        s1.forEach(s -> System.out.println(s));

        //map获取流();
        Map<String,Integer> map=new HashMap<>();
        map.put("java",1);
        //获取键流
        Stream<String> s2=map.keySet().stream();
        //获取值流
        Stream<Integer> s3=map.values().stream();
        //也可以获取键值对流
        Stream<Map.Entry<String,Integer>> s4=map.entrySet().stream();

        //数组获得stream流
        String names[]={"张三","李四","王五"};
        //通过Arrays.stream(数组名)
        Stream<String> s5=Arrays.stream(names);
        System.out.println(s5.count());
       // s5.forEach(s -> System.out.println(s));//这流水线已经被终结了，无法再用s5这个流水线了

        Integer arr[]={1,2,3};
        Stream<Integer> s6=Stream.of(arr);//基本类型肯定是不能写在泛型的位置

             func(Integer.valueOf(1));
        func(1);
        func(1,2,3);

        Map<String,List<String>> map2=new HashMap<>();//map第二个数可以变成集合类型
    }

    public static<T> void func(T...nums)//可变参数，对于提供的参数的数量限制是任意的，你可以提供也可以不提供，提供多个就给你封装成数组，只不过我可以用泛型去定义nums，但是需要再在定义方法的时候去声明
    {
        for (T num:nums)
        {
            System.out.print(num);
        }
        System.out.println();

    }

}
